
this is beta version coord reader

open file

dws_cordinates.ini

example 

write 
string name = "My_coord"
float x=283.917603
float y=-1381.756592
float z=31.457880

[slot:5]
Name=Crusade Rd
x=283.917603
y=-1381.756592
z=31.457880

see how struct work

void do_coordinates_list()
{
    INI_SELECT = 2;

    coordinates_found = 0;
    print_text("make coords_list 1",1000);
    for (int i = 0; i <= 49; ++i)
    {
        //make index
        char buffer[25];
        snprintf(buffer, sizeof(buffer), "slot:%i", i);
        const char* destPtr = (const char *)buffer;

        if(coordinates_found > 49){break;}//array limit

        float value1,value2,value3;
        value1 = 0.0;
        value2 = 0.0;
        value3 = 0.0;
        const char* name = ReadString(destPtr, "Name");
        value1 = ReadFloat(destPtr,"x");
        value2 = ReadFloat(destPtr,"y");
        value3 = ReadFloat(destPtr,"z");

        if(strcmp(name, "null") == 0){continue;}
        print_text("make coords_list 2",1000);

        if(value1 == 0.0 && value2 == 0.0 && value3 == 0.0){continue;}

        //put params to struct at array
        cords[coordinates_found].na = name;
        cords[coordinates_found].cx = value1;
        cords[coordinates_found].cy = value2;
        cords[coordinates_found].cz = value3;
        coordinates_found++;
        ini_write_integer("current","slot",coordinates_found);
        

    }
    
    return;
}

void do_coordinates_list1() //save player location to ini
{
    INI_SELECT = 2;

    int slot;
    ini_read_integer("current","slot",     &slot);
    slot++;
    //for (int i = 0; i <= 49; ++i)
    //{
        //make index
        char buffer[25];
        snprintf(buffer, sizeof(buffer), "slot:%i", slot);
        const char* destPtr = (const char *)buffer;

        if(slot > 49){
            print_text("~r~Not free slots",1000);
        return;
        }//array limit

        Hash streetName;
        Hash crossingRoad;
        Vector3 Var3 = ENTITY::GET_ENTITY_COORDS(PLAYER::PLAYER_PED_ID(), true);
        PATHFIND::GET_STREET_NAME_AT_COORD(Var3.x,Var3.y,Var3.z,&streetName,&crossingRoad);
        const char* name = UI::GET_STREET_NAME_FROM_HASH_KEY(streetName);

        //std::string s = cstr;
        std::string s(name);
        std::replace(s.begin(), s.end(), ' ', '_'); 
        if(!GAMEPLAY::IS_STRING_NULL_OR_EMPTY(s.c_str()))
        {
            WriteString(destPtr, "Name",s.c_str());
        }
        else{
            WriteString(destPtr, "Name","Player_coords");
        }
        WriteFloat(destPtr,"x",Var3.x);
        WriteFloat(destPtr,"y",Var3.y);
        WriteFloat(destPtr,"z",Var3.z);
        
        
        ini_write_integer("current","slot",slot);
    //}
    
    return;
}

void do_coordinates_list2() //make one empty slot
{
    INI_SELECT = 2;

    int slot;
    ini_read_integer("current","slot",     &slot);
    slot++;
    //for (int i = 0; i <= 49; ++i)
    //{
        //make index
        char buffer[25];
        snprintf(buffer, sizeof(buffer), "slot:%i", slot);
        const char* destPtr = (const char *)buffer;

        if(slot > 49){return;}//array limit

        WriteString(destPtr, "Name","player_coords");
        WriteFloat(destPtr,"x",0.00000000f);
        WriteFloat(destPtr,"y",0.00000000f);
        WriteFloat(destPtr,"z",0.00000000f);
        
        
        ini_write_integer("current","slot",slot);
    //}
    
    return;
}

void do_coordinates_list3() //make 50 empty slots
{
    INI_SELECT = 2;

    coordinates_found = 0;
    for (int i = 0; i <= 49; ++i)
    {
        //make index
        char buffer[25];
        snprintf(buffer, sizeof(buffer), "slot:%i", coordinates_found);
        const char* destPtr = (const char *)buffer;

        if(coordinates_found > 49){break;}//array limit

        WriteString(destPtr, "Name","null");
        WriteFloat(destPtr,"x",0.00000000);
        WriteFloat(destPtr,"y",0.00000000);
        WriteFloat(destPtr,"z",0.00000000);
        
        coordinates_found++;
    }
    
    return;
}